package org.n3r.idworker.strategy;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DayPrefixRandomCodeStrategy extends DefaultRandomCodeStrategy
{
	private final String dayFormat;
	private String lastDay;

	public DayPrefixRandomCodeStrategy(String dayFormat)
	{
		this.dayFormat = dayFormat;
	}

	@Override
	public void init()
	{
		String day = createDate();
		if (day.equals(lastDay))
		{
			throw new RuntimeException("init failed for day unrolled");
		}

		lastDay = day;

		availableCodes.clear();
		release();

		prefixIndex = Integer.parseInt(lastDay);
		if (tryUsePrefix())
		{
			return;
		}

		throw new RuntimeException("prefix is not available " + prefixIndex);
	}

	private String createDate()
	{
		return new SimpleDateFormat(dayFormat).format(new Date());
	}

	@Override
	public int next()
	{
		if (!lastDay.equals(createDate()))
		{
			init();
		}

		return super.next();
	}
}
